package com.scheduling.schedule.service;

import com.scheduling.product.entity.Operation;

import java.util.List;

/**
 * 工序排产服务接口
 * 专门用于排产算法的工序查询服务
 *
 * @author 开发团队
 */
public interface OperationScheduleService {

    /**
     * 根据产品ID查询工艺路线的所有工序
     *
     * @param productId 产品ID
     * @return 工序列表（按sequence_no排序）
     */
    List<Operation> getOperationsByProductId(String productId);

    /**
     * 根据工序ID查询工序详情
     *
     * @param operationId 工序ID
     * @return 工序信息
     */
    Operation getOperationById(String operationId);

    /**
     * 根据工序要求的机器类型查询兼容的机器列表
     *
     * @param operationId 工序ID
     * @return 兼容的机器ID列表
     */
    List<String> getCompatibleMachines(String operationId);

    /**
     * 检查工序依赖关系
     *
     * @param operationId 工序ID
     * @return 前置工序ID列表
     */
    List<String> getPredecessorOperations(String operationId);

    /**
     * 根据机器类型ID查询空闲机器
     *
     * @param machineTypeId 机器类型ID
     * @return 空闲机器ID列表
     */
    List<String> getIdleMachinesByType(String machineTypeId);

    /**
     * 检查工序依赖是否满足
     *
     * @param operationId         工序ID
     * @param completedOperations 已完成的工序ID列表
     * @return 是否可以开始该工序
     */
    boolean canStartOperation(String operationId, List<String> completedOperations);

    /**
     * 按工序依赖关系排序工序列表
     *
     * @param operations 工序列表
     * @return 排序后的工序列表
     */
    void sortOperations(List<Operation> operations);
} 